home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / CIncludes / Patches.h < prev    next >
C/C++ Source or Header  |  1996-05-01  |  8KB  |  273 lines

  1. /*
  2.      File:        Patches.h
  3.  
  4.      Contains:    Patch Manager Interfaces.
  5.  
  6.      Version:    Technology:    System 8
  7.                  Release:    Universal Interfaces 3.0d3 on Copland DR1
  8.  
  9.      Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10.  
  11.      Bugs?:        If you find a problem with this file, send the file and version
  12.                  information (from above) and the problem description to:
  13.  
  14.                      Internet:    apple.bugs@applelink.apple.com
  15.                      AppleLink:    APPLE.BUGS
  16.  
  17. */
  18. #ifndef __PATCHES__
  19. #define __PATCHES__
  20.  
  21. #ifndef __TYPES__
  22. #include <Types.h>
  23. #endif
  24. #ifndef __KERNEL__
  25. #include <Kernel.h>
  26. #endif
  27. #ifndef __ORDEREDITEMS__
  28. #include <OrderedItems.h>
  29. #endif
  30.  
  31. #ifdef __cplusplus
  32. extern "C" {
  33. #endif
  34.  
  35. #if PRAGMA_IMPORT_SUPPORTED
  36. #pragma import on
  37. #endif
  38.  
  39. #if PRAGMA_ALIGN_SUPPORTED
  40. #pragma options align=mac68k
  41. #endif
  42.  
  43. #if FOR_SYSTEM7_AND_SYSTEM8_DEPRECATED
  44.  
  45. enum {
  46.     kOSTrapType                    = 0,
  47.     kToolboxTrapType            = 1
  48. };
  49.  
  50. typedef SignedByte TrapType;
  51.  
  52. enum {
  53.     OSTrap                        = kOSTrapType,                    /* old name */
  54.     ToolTrap                    = kToolboxTrapType                /* old name */
  55. };
  56.  
  57. /*
  58.     GetTrapAddress and SetTrapAddress are obsolete and should not
  59.     be used. Always use NGetTrapAddress and NSetTrapAddress instead.
  60.     The old routines will not be supported for PowerPC apps.
  61. */
  62. #if OLDROUTINENAMES && !GENERATINGCFM
  63.  
  64. #if GENERATING68K && !GENERATINGCFM
  65. #pragma parameter __A0 GetTrapAddress(__D0)
  66. #endif
  67. extern pascal UniversalProcPtr GetTrapAddress(UInt16 trapNum)
  68.  ONEWORDINLINE(0xA146);
  69.  
  70.  
  71. #if GENERATING68K && !GENERATINGCFM
  72. #pragma parameter SetTrapAddress(__A0, __D0)
  73. #endif
  74. extern pascal void SetTrapAddress(UniversalProcPtr trapAddr, UInt16 trapNum)
  75.  ONEWORDINLINE(0xA047);
  76.  
  77. #endif
  78. extern pascal UniversalProcPtr NGetTrapAddress(UInt16 trapNum, TrapType tTyp);
  79.  
  80. extern pascal void NSetTrapAddress(UniversalProcPtr trapAddr, UInt16 trapNum, TrapType tTyp);
  81.  
  82.  
  83. #if GENERATING68K && !GENERATINGCFM
  84. #pragma parameter __A0 GetOSTrapAddress(__D0)
  85. #endif
  86. extern pascal UniversalProcPtr GetOSTrapAddress(UInt16 trapNum)
  87.  ONEWORDINLINE(0xA346);
  88.  
  89.  
  90. #if GENERATING68K && !GENERATINGCFM
  91. #pragma parameter SetOSTrapAddress(__A0, __D0)
  92. #endif
  93. extern pascal void SetOSTrapAddress(UniversalProcPtr trapAddr, UInt16 trapNum)
  94.  ONEWORDINLINE(0xA247);
  95.  
  96.  
  97. #if GENERATING68K && !GENERATINGCFM
  98. #pragma parameter __A0 GetToolTrapAddress(__D0)
  99. #endif
  100. extern pascal UniversalProcPtr GetToolTrapAddress(UInt16 trapNum)
  101.  ONEWORDINLINE(0xA746);
  102.  
  103.  
  104. #if GENERATING68K && !GENERATINGCFM
  105. #pragma parameter SetToolTrapAddress(__A0, __D0)
  106. #endif
  107. extern pascal void SetToolTrapAddress(UniversalProcPtr trapAddr, UInt16 trapNum)
  108.  ONEWORDINLINE(0xA647);
  109.  
  110.  
  111. #if GENERATING68K && !GENERATINGCFM
  112. #pragma parameter __A0 GetToolboxTrapAddress(__D0)
  113. #endif
  114. extern pascal UniversalProcPtr GetToolboxTrapAddress(UInt16 trapNum)
  115.  ONEWORDINLINE(0xA746);
  116.  
  117.  
  118. #if GENERATING68K && !GENERATINGCFM
  119. #pragma parameter SetToolboxTrapAddress(__A0, __D0)
  120. #endif
  121. extern pascal void SetToolboxTrapAddress(UniversalProcPtr trapAddr, UInt16 trapNum)
  122.  ONEWORDINLINE(0xA647);
  123.  
  124. #if GENERATINGPOWERPC
  125. extern pascal UniversalProcHandle GetTrapVector(UInt16 trapNumber);
  126.  
  127. #endif
  128. /*
  129.  
  130. // Moved here from StdCLib
  131. pascal Boolean TrapAvailable (UInt16 trapNumber);
  132.  
  133. */
  134. #endif
  135. /* FOR_SYSTEM7_AND_SYSTEM8_DEPRECATED*/
  136. #if FOR_SYSTEM8_PREEMPTIVE
  137. typedef struct OpaquePatchID* PatchID;
  138. typedef struct OpaquePatchChainID* PatchChainID;
  139. typedef void *PatchableProcPtr;
  140. typedef OptionBits PatchOptions;
  141.  
  142. enum {
  143.     kPatchEnabledBit            = 0,
  144.     kPatchCompatibilityBit        = 1,
  145.     kPatchOptionalBit            = 2
  146. };
  147.  
  148.  
  149. enum {
  150.     kPatchEnabledMask            = (1L << kPatchEnabledBit),
  151.     kPatchCompatibilityMask        = (1L << kPatchCompatibilityBit),
  152.     kPatchOptionalMask            = (1L << kPatchOptionalBit)
  153. };
  154.  
  155. typedef OrderedItemName PatchName;
  156. typedef PatchName *PatchNamePtr;
  157. typedef OrderRequirements PatchOrderRequirements;
  158. typedef PatchOrderRequirements *PatchOrderRequirementsPtr;
  159. struct PatchDescription {
  160.     PatchableProcPtr                 originalRoutine;            /* A normal (probably imported) proc ptr.*/
  161.     PatchableProcPtr                 patchRoutine;                /* A normal (probably imported) proc ptr.*/
  162.     PatchName                         thisPatchName;
  163.     PatchOrderRequirements             thisPatchOrdering;
  164.     PatchOptions                     installOptions;
  165.     OSStatus                         installResult;
  166.     PatchID                         thisPatchID;                /* Set if installed OK.*/
  167.     PatchableProcPtr                 thisCallThroughProc;        /* Set if installed OK.*/
  168.     PatchID                         rejectingPatchID;            /* Set if there was an installation error.*/
  169. };
  170. typedef struct PatchDescription PatchDescription;
  171.  
  172. typedef PatchDescription *PatchDescriptionPtr;
  173. #define InitialPatchDescription(originalProc,patchProc,patchName,patchOrder,installOptions)        \
  174.         {originalProc, patchProc, patchName, patchOrder, installOptions, paramErr, kInvalidID, NULL, kInvalidID}
  175. typedef OptionBits PatchHeaderOptions;
  176.  
  177. enum {
  178.     kRequiredPatchErrorsMask    = 0x00000001,                    /* Any installation errors in required patches?*/
  179.     kOptionalPatchErrorsMask    = 0x00000002                    /* Any installation errors in optional patches?*/
  180. };
  181.  
  182.  
  183. enum {
  184.     kPatchHeaderTag                = 'Ptch',
  185.     kPatchHeaderVersion            = 1
  186. };
  187.  
  188. struct PatchHeader {
  189.     OSType                             tag;                        /* Must be 'Ptch'.*/
  190.     UInt32                             version;                    /* The data structure version.*/
  191.     PatchHeaderOptions                 flags;                        /* Set by CFM with install status.*/
  192.     ItemCount                         count;                        /* The total size of the "patches" array.*/
  193.     PatchDescriptionPtr *            patches;                    /* Pointer to description array.*/
  194. };
  195. typedef struct PatchHeader PatchHeader;
  196.  
  197.  
  198. enum {
  199.     kPatchInformationVersion    = 1
  200. };
  201.  
  202. struct PatchInformation {
  203.     PatchChainID                     patchChain;
  204.     PatchableProcPtr                 patchingRoutine;
  205.     PatchOptions                     patchOptions;
  206.     PatchName                         patchName;
  207.     PatchOrderRequirements             patchOrder;
  208. };
  209. typedef struct PatchInformation PatchInformation;
  210.  
  211. typedef PatchInformation *PatchInformationPtr;
  212.  
  213. enum {
  214.     kPatchChainInformationVersion = 1
  215. };
  216.  
  217. struct PatchChainInformation {
  218.     KernelProcessID                 kernelProcess;
  219.     PatchableProcPtr                 chainRoot;
  220. };
  221. typedef struct PatchChainInformation PatchChainInformation;
  222.  
  223. typedef PatchChainInformation *PatchChainInformationPtr;
  224. /*
  225.  *    Maps a ProcPtr to a PatchChainID.
  226.  *        If the ProcPtr is a patch,                     return noErr and Chain
  227.  *        If the ProcPtr is a root,                     return noErr and Chain 
  228.  *        If the ProcPtr is not a patch or a root,     return an error
  229. */
  230. extern OSStatus GetPatchChainFromProcPtr(KernelProcessID theKernelProcess, PatchableProcPtr theRoutine, PatchChainID *thePatchChain);
  231.  
  232. /*
  233.  *    Maps a ProcPtr to a PatchID.
  234.  *        If the ProcPtr is a patch,                     return noErr and the PatchID
  235.  *        If the ProcPtr is a root,                     return notAPatchErr
  236.  *        If the ProcPtr is not a patch or a root,     return notAPatchErr
  237. */
  238. extern OSStatus GetPatchFromProcPtr(KernelProcessID theKernelProcess, PatchableProcPtr theRoutine, PatchID *thePatch);
  239.  
  240. extern OSStatus GetPatchChainInformation(PatchChainID thePatchChain, PBVersion version, PatchChainInformation *patchChainInfo);
  241.  
  242. extern OSStatus GetPatchInformation(PatchID thePatchID, PBVersion version, PatchInformation *patchInfo);
  243.  
  244. /*
  245.  *    Iteration functions:
  246.  *        Get all the chains in a KernelProcess, and
  247.  *        Get all the patches in a chain
  248. */
  249. extern OSStatus GetPatchChainsInKernelProcess(KernelProcessID theKernelProcess, ItemCount requestedPatchChains, ItemCount *totalPatchChains, PatchChainID *thePatchChains);
  250.  
  251. extern OSStatus GetPatchesInPatchChain(PatchChainID thePatchChain, ItemCount requestedPatches, ItemCount *totalPatches, PatchID *thePatches);
  252.  
  253. extern OSStatus EnablePatch(PatchID thePatch);
  254.  
  255. extern OSStatus DisablePatch(PatchID thePatch);
  256.  
  257. #endif
  258.  
  259. #if PRAGMA_ALIGN_SUPPORTED
  260. #pragma options align=reset
  261. #endif
  262.  
  263. #if PRAGMA_IMPORT_SUPPORTED
  264. #pragma import off
  265. #endif
  266.  
  267. #ifdef __cplusplus
  268. }
  269. #endif
  270.  
  271. #endif /* __PATCHES__ */
  272.  
  273.